//
//  StatusesCell.swift
//  SinaMicroBlog
//
//  Created by wxy on 15/9/7.
//  Copyright © 2015年 wxy. All rights reserved.
//

import UIKit

// 控件间的间距
let StatusesCellMargin: CGFloat = 12
// 头像大小
let StatusesCellIconWidth: CGFloat = 35
// 默认图片大小
let StatusesPictureItemWidth: CGFloat = (UIScreen.mainScreen().bounds.width - StatusesPictureItemMargin * (StatusesPictureMaxCount + 1)) / StatusesPictureMaxCount
// 默认图片间距
let StatusesPictureItemMargin: CGFloat = 10
// 每行最大图片数
let StatusesPictureMaxCount: CGFloat = 3
// 配图视图的最大的尺寸
let StatusesPictureMaxWidth = StatusesPictureItemWidth * StatusesPictureMaxCount + StatusesPictureItemMargin * (StatusesPictureMaxCount - 1)


class StatusesCell: UITableViewCell {
    
    var statusesViewModel: StatusesViewModel? {
        
        // 模型数值设置之后 马上产生连锁反应 - 界面UI发生变化
        didSet {
            topView.statusesViewModel = statusesViewModel
            contentLabel.text = statusesViewModel?.statuses.text
            
            // 在自动布局系统中 随机修改表格的约束 使用自动计算行高容易出问题
            // 自动计算行高和最后的预估行高 有出入 造成的问题
            // 通过测试 提前确定方法的可行性
            // printLog(random() % 4)
            // pictureViewHeightConstraint?.constant = StatusesPictureItemWidth * CGFloat(random() % 4)
            
            // 从控制器传递来得视图模型一定要传递给pictureView的视图模型 
            pictureView.statusesViewModel = statusesViewModel
            
            // MARK: - 好技巧 设置配图视图 内部的sizeToFit 计算大小
            pictureViewWidthConsttraint?.constant = pictureView.bounds.width
            pictureViewHeightConstraint?.constant = pictureView.bounds.height
            
            // 根据是否包含图片 决定顶部约束
            pictureViewTopConstraint?.constant = statusesViewModel?.thumbnailURLs?.count == 0 ? 0 : StatusesCellMargin
        }
    }
    
    // 宽度约束
    var pictureViewWidthConsttraint: NSLayoutConstraint?
    // 高度约束
    var pictureViewHeightConstraint: NSLayoutConstraint?
    // 顶部约束
    var pictureViewTopConstraint: NSLayoutConstraint?
    
    // 计算指定视图模型的行高
    // MARK: - 对象函数？不太懂
    func rowHeight(viewModel: StatusesViewModel) -> CGFloat {
        
        // printLog("计算行高")
        
        // 1.更新完约束 才能获取行高 - 调用模型的 didSet
        statusesViewModel = viewModel
        
        // 2.有了内容之后更新约束
        layoutIfNeeded()
        
        // 3.返回底部视图的最大高度
        return CGRectGetMaxY(bottomView.frame)
        
    }
    // MARK: - 搭建界面
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        
        setUpUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func setUpUI() {
        
        // 表格的cell 一定要指定背景颜色 同时不要指定clearColor 不建议指定透明度
        backgroundColor = UIColor.whiteColor()
        
        // 顶部分割视图（装饰性，不用懒加载）
        let topSeparatorView = UIView()
        topSeparatorView.backgroundColor = UIColor(white: 0.85, alpha: 1.0)
        
        // 1.添加控件
        contentView.addSubview(topSeparatorView)
        contentView.addSubview(topView)
        contentView.addSubview(contentLabel)
        contentView.addSubview(pictureView)
        contentView.addSubview(bottomView)
        
        // 2.设置布局 cell默认是320/44 iphone4遗留问题 不能使用系统默认的cell的宽度
        // printLog(bounds)
        let width = UIScreen.mainScreen().bounds.width
        // 1>顶部分割视图
        topSeparatorView.ff_AlignInner(type: ff_AlignType.TopLeft, referView: contentView, size: CGSize(width: width, height: 10))
        // 2>顶部视图
        topView.ff_AlignVertical(type: ff_AlignType.BottomLeft, referView: topSeparatorView, size: CGSize(width: width, height: StatusesCellMargin + StatusesCellIconWidth))
        // 3.正文标签
        contentLabel.ff_AlignVertical(type: ff_AlignType.BottomLeft, referView: topView, size: nil, offset: CGPoint(x: StatusesCellMargin, y: StatusesCellMargin))
        
        // 5.底部视图
        bottomView.ff_AlignVertical(type: ff_AlignType.BottomLeft, referView: pictureView, size: CGSize(width: width, height: 44), offset: CGPoint(x: -StatusesCellMargin, y: StatusesCellMargin))
        
        // 指定底部视图相对底边约束（UITableViewAutomaticDimension自动处理行高的条件）
        // bottomView.ff_AlignInner(type: ff_AlignType.BottomRight, referView: contentView, size: nil)
        
        
    }

    // MARK: - 懒加载控件 从上到下 从左到右 便于后期维护
    // 1.顶部视图
    private lazy var topView: StatusesCellTopView = StatusesCellTopView()
    
    // 2.文本标签
    lazy var contentLabel = UILabel(title: nil, color: UIColor.darkGrayColor(), fontSize: 15, layoutWidth: UIScreen.mainScreen().bounds.width - 2 * StatusesCellMargin)
    
    // 3.配图视图
    lazy var pictureView: StatusesPictureView = StatusesPictureView()
    
    // 4.底部视图
    lazy var bottomView: StatusesCellBottomView = StatusesCellBottomView()
}
